in演算子やhasOwnPropertyで型の絞り込みをせず、Taggue Unionを使う
今まで普通に後者を使っていたので、前者の問題が起きるの見てなるほどとなったmrsekut.icon
こういう型を定義した時
code:ts
type GitRepository =
| { url: string }
| { owner: string; name: string };
こんな値があると、これは、前者として解釈される
code:ts
const repo = {
owner: "susisu",
name: "typefuck",
url: 666,
};
GitRepositoryを引数にとって、in演算子で分岐している実装があるとバグる 自分が書いたコード見てみたら、
type guardする関数を書く時
ちょうどfetchしてきた値を検証する時
とかで使ってたmrsekut.icon
前者は修正できる
後者は仕方ない気もする